package com.spark.sql

import org.apache.spark.SparkConf
import org.apache.spark.sql._

/**
  *
  * @author Pop
  * @date 2022/7/20 22:48
  */
object Spark08_SparkSql_Test1 {
  def main(args: Array[String]): Unit = {
    System.setProperty("HADOOP_USER_NAME", "root")
    // 创建SparkSql的运行环境
    val sparkSql: SparkConf = new SparkConf().setMaster("local[*]").setAppName("sparkSql")
    val session: SparkSession = SparkSession.builder()
      .enableHiveSupport()//启动hive支持，很重要
      .config(sparkSql).getOrCreate()
    // 先创建一个数据库
    session.sql("use popbase")
    session.sql(
      """
        |select * from
        |(
        |    -- 第三步，按照点击次数排序
        |    select *,
        |        -- 以区域进行排序，按照点击次数，降序
        |        rank() over(partition by area order by clickCnt desc) as rank
        |    from (
        |        -- 第二部，按照地区进行分组
        |    select
        |        area,product_name,
        |        count(*) as clickCnt --点击的次数
        |        from
        |        (  -- 第一步将三张表关联起来
        |            select
        |            a.*,
        |            p.product_name, --商品名称
        |            c.city_name, -- 城市名称
        |            c.area -- 地区
        |            from
        |            user_visit_action a
        |            join product_info  p on p.product_id = a.click_product_id
        |            join city_info c on c.city_id = a.city_id
        |            where a.click_product_id > -1 --是点击操作
        |        ) t1 group by area,product_name -- 按照地区和产品名分组
        |    )  t2
        |) t3 where rank <=3
        |""".stripMargin).show()


    session.close()
  }

}
